<?php
/**
 * 使用widget 小部件 的方法：通常用来封装 页面 通用小部件，比如 导航 ，侧边栏 等 每个页面都要用到的 内容
 * widget 小部件 在 tp5 中 称为 分层控制器，模板调用时 从原来3.2的 W（）改成 widget()
 * 如果 要在 widget 中使用 view 显示页面  则 需要 在项目的 view 文件夹 下  建立 widget文件夹
 * 然后 像这样 调用 return $this->fetch('widget/leftCategory');//当然得有视图了
 * User: Administrator
 * Date: 2017/10/24
 * Time: 9:05
 */
namespace app\index\widget;
use think\Controller;


class InfoWidget extends Controller
{
	public $infoWdb = null;  //属性初始化
	public $redis = null;

	public function _initialize()
	{
		parent::_initialize(); // TODO: Change the autogenerated stub
		$this->infoWdb = model('info_widget');  //数据初始化
		//cache_init();//缓存设置初始化（使用默认可不执行）
		if (!extension_loaded('redis')) {   //判断是否有扩展(如果你的apache没reids扩展就会抛出这个异常)
			throw new \BadFunctionCallException('not support: redis');
		}

		if($this->redis==null){
			$this->redis = new \Redis;
			$this->redis->connect('127.0.0.1', 6379);
		}else{
			echo 'redis 缓存已存在！';
		}
	}

	/*	函数功能：取侧边栏新闻数据
	 *	逻辑：先检查缓存，有则读缓存，无则 读数据库
	 *	小技巧：使用了eval()函数 来 动态执行 从数据库取出的 字符串 代码
	 *  最后修改时间:2017/12/19 11:39
	 */
	public function list_loder($id){
		if($this->redis->exists('getinfo')){
			$redis_server_info = $this->redis->info() ;
			echo "redis-cache:已使用{$redis_server_info['used_memory_human']}&nbsp峰值:{$redis_server_info['used_memory_peak_human']}<br>";
			$this->assign('title',$this->redis->get('gettitle'));
			$this->assign('getinfo',unserialize($this->redis->get('getinfo')));
		}else{
			$get_config = $this->infoWdb->where('w_id',$id)->find();
			echo 'no-redis-caching';
			if ($get_config){
				$getinfo = eval('return '.$get_config['w_model']);//取出sql语句，并执行之
				$this->redis->set('getinfo',serialize($getinfo),300 );
				$this->redis->set('gettitle',$get_config["w_title"],300);
				$this->assign('title',$get_config["w_title"]);
				$this->assign('getinfo',$getinfo);
			}else{
				return '侧边栏配置信息有误，请检查！';
			}
		}
		return $this->fetch("5000/widget/list");
	}
}